package daos;

import java.util.List;

import busquedas.CriterioDeBusqueda;
import aterrizar.Usuario;
import model.Asiento;
import model.Tramo;
import model.Vuelo;
import servicios.*;

public class ManagerVuelo  {

	
	/**
	 * Realiza una reserva sobre un asiento.
	 * @param codigo del Asiento.
	 * @param Usuario al que se le asocia el asiento.
	 */
	public void reservarAsiento(Long codAsiento, Usuario usuario){
		ReservarAsiento reservaAux = new ReservarAsiento(codAsiento, usuario);
		SessionManager.runInSession(reservaAux);
		
	}
	/**
	 * Checkea si un asiento esta disponible
	 * @param Codigo del asiento
	 * @return Valor booleano que indica si esto es verdadero o falso.
	 */
	public boolean checkearDisponibilidad(Long codAsiento){
		CheckearDisponibilidad checkAux = new CheckearDisponibilidad(codAsiento);
		return !SessionManager.runInSession(checkAux).getEstaReservado();
	}

	/**
	 * Reserva sobre un grupo de asientos
	 * @param Lista de codigos de los asientos a reservar.
	 * @param Usuario al que se le asocia esta reserva.
	 */
	public void reservarGrupoAsientos(List<Long> codAsientos, Usuario usuario){
	  ReservarGrupoAsientos reservarAsientos = new ReservarGrupoAsientos(codAsientos, usuario);
	  SessionManager.runInSession(reservarAsientos);
	}
	/**
	 * Agrega un vuelo al sistema
	 * @param Vuelo a agregar
	 * @return Devuelve el vuelo agregado.
	 */
	public Vuelo agregarVuelo(Vuelo v){
		return SessionManager.runInSession(new CrearVuelo(v));
	}
	/**
	 * Obtiene un vuelo del sistema.
	 * @param ID del vuelo a obtener
	 * @return El vuelo correspondiente al ID
	 */
	public Vuelo getVuelo(Long id){
		return SessionManager.runInSession(new GetVuelo(id));
	}
	
	/**
	 * Obtiene un tramo determinado.
	 * @param ID del tramo.
	 * @return Tramo en cuestion.
	 */
	public Tramo getTramo(Long id){
			return (Tramo) SessionManager.runInSession(new GetTramo(id));
	}
	/**
	 * Obtiene un asiento determinado.
	 * @param ID del Asiento.
	 * @return Asiento en cuestion.
	 */
	public Asiento getAsiento(Long id){
		return (Asiento) SessionManager.runInSession(new GetAsiento(id));
	}
	/**
	 * Realiza una busqueda sobre un criterio
	 * @param criterio de busqueda
	 * @return Lista de vuelos resultado.
	 */
	public List<Vuelo> realizarBusqueda(CriterioDeBusqueda criterio){
		return (List<Vuelo>) SessionManager.runInSession(new RealizarBusqueda(criterio));
	}
	
	public void deleteVuelo(Vuelo v){
		SessionManager.runInSession(new DeleteVuelo(v));
	}
}
